package xim

import (
	"time"

	"gitee.com/xiaoyutab/xgotool/optional/xcache"
	"gitee.com/xiaoyutab/xgotool/optional/xlog"
	"gitee.com/xiaoyutab/xgotool/xerror"
)

// 创建用户的设备ID
//
//	der	设备信息，如果该信息中存在ID则表示为修改设备信息，而不再是创建设备
//	mac	设备MAC地址，只有在设备ID=0时，才会创建设备并连同创建设备关联MAC
func CreateDervice(der *ImUserDervice, mac map[string]string) error {
	if der.Id > 0 {
		err := _default.DB.Table(_default.UserDerviceTable).
			Select("hostname", "goos", "arch", "is_deleted").
			Where("is_deleted", 0).
			Updates(der).
			Error
		if err != nil {
			return xlog.AE("IM用户设备信息存储失败", err)
		}
		if der.IsDeleted == 1 {
			// 如果是删除设备的话，需要同步删除关联的MAC网卡
			_default.DB.Table(_default.UserDerviceMacTable).Where("dervice_id", der.Id).Update("is_deleted", 1)
			// 查询源mac，用于删除缓存操作
			mac_list := []string{}
			_default.DB.Table(_default.UserDerviceMacTable).Where("dervice_id", der.Id).Select("mac").Find(&mac_list)
			for _, v := range mac_list {
				xcache.Remove(xcache.Key("xim.get.dervice", v))
			}
		}
		return nil
	}
	if der.UserId == 0 {
		return xerror.New("用户ID不允许为空")
	}
	if len(mac) == 0 {
		return xerror.New("设备MAC列表禁止为空")
	}
	// 检测设备是否存在
	_, err := GetDervice(der.UserId, mac)
	if err == nil {
		// 设备已存在
		return xerror.New("设备MAC地址已存在，请勿重新添加")
	}
	if der.CreatedAt == "" {
		der.CreatedAt = time.Now().Format(time.DateTime)
	}
	if der.LastSendTime == "" {
		der.LastSendTime = time.Now().Format(time.DateTime)
	}
	// 创建设备信息
	err = _default.DB.Table(_default.UserDerviceTable).Save(der).Error
	if err != nil {
		return xlog.AE("设备信息存储失败", err)
	}
	// 创建MAC地址
	create_mac(der.Id, der.UserId, mac)
	// 写入缓存
	for _, v := range mac {
		xcache.SetStruct(xcache.Key("xim.get.dervice", v), der)
	}
	return nil
}
